Stackdriver Logging → BigQuery
Cloud Logging → BigQuery
Stackdriver Logging から Export する
日本語ではなぜか "シンク" という名前になっているが英語では単に "Export"
"高度なフィルタ" で GAE からのアプリケーションログとログの属性でフィルタする
https://gyazo.com/fab5be266314ed9aabf764f2d924b6c0
ワンタイムではなくルールを作っておくと以後のデータはエクスポートされる
GAE の stdout に出したログのうち、jsonPayload.field1 が空でないもののフィルタ例
https://gyazo.com/26dcc04e9de2674b96cbf418f27ee5a9
BigQuery のデータセット名を指定してエクスポートできる
Export 設定の UI からデータセットを作成するのでなく先に BigQuery 側で作って選ぶほうがよさそう
リージョンがいつのまにか US になってたりするため
テーブル名は logId
logName の形式は projects/{project}/logs/{}
スキーマ
エクスポートされたログの BigQuery スキーマ  |  Cloud Logging  |  Google Cloud
UUID_SHORT のような値は文字列で送るのがいい、Float になって精度落ちてしまう、INT64 は signed
型が気に食わない場合
epoch を入れているのに INT64 でなく FLOAT になってしまうなど
あとから置き換える
BigQuery#603da52e3844610000286d31
先に部分的なスキーマを作る
スキーマの不一致 - エクスポートされたログの BigQuery スキーマ  |  Cloud Logging  |  Google Cloud
パーティショニング
👉BigQuery パーティショニング
2019/7 頃は単一テーブルかシャーディングを選べた
Cloud Logging -> BigQuery の sink を作る場合
データの timestamp と BigQuery に到着した時間の差がありうるので、例えば日付ギリギリの行はどちらのパーティションに行くか曖昧だと思っていた
でもそうでもなさそう?
code:query.sql
SELECT
MIN(jsonPayload.time), MAX(jsonPayload.time),
MIN(timestamp), MAX(timestamp),
FROM xxx.appengine_googleapis_com_stdout
WHERE DATE(_PARTITIONTIME) = "2020-01-01"
2019/12/16 Release notes  |  Stackdriver Logging  |  Google Cloud
パーティショニングが GA した
ログの timestamp フィールドが _PARTITIONTIME に入るようになった
英語のドキュメントでは言及があった
BigQuery schema for exported logs  |  Stackdriver Logging  |  Google Cloud
2020/2/18 いつのまにかパーティショニングテーブルが、カラムパーティショニングになっている??
確認中
先週変わったっぽい
#Cloud_Logging #BigQuery #GoogleCloud